package com.jhxx.jmap.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.jhxx.jmap.Metaspace;
import com.jhxx.jmap.entity.User;

/**
 * 演示内存溢出
 * @author root
 *
 */
@RestController
@RequestMapping("/memory")
public class MemoryController {
	//这个是不会被回收的
	private List<User> list = new ArrayList<User>();
	private List<Class<?>>  classList = new ArrayList<Class<?>>();
	
	
	/**
	 * 最大内存最小内存都是32M
	 * -Xmx32M -Xms32M
	 * 堆内存溢出
	 */
	@RequestMapping("/s")
	public void heap() {
		int i = 0;
		while(true) {
			list.add(new User(i++,UUID.randomUUID().toString()));
		}
	}
	
	/**
	 * 非堆内存溢出
	 * 不停的创建类
	 * -XX:MetaspaceSize=32M -XX:MaxMetaspaceSize=32M
	 * */
	@GetMapping("/nonheap")
	public String nonheap() {
		while(true) {
			classList.addAll(Metaspace.createClasses());
		}
	}
	

}
